package services;

import java.util.Iterator;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;

import classes.CartaoFidelidadeImpl;

public class CartaoFidelidadeService {

	public OMElement adicionarPontos(OMElement element) {
		
		CartaoFidelidadeImpl cfi = new CartaoFidelidadeImpl();
		
		// Criar um OMElement que retorna um booleano
		Iterator<OMElement> it = element.getChildElements();
		OMElement codigo_par = it.next();
		OMElement pontos_par = it.next();
		
		Integer codigo = Integer.parseInt(codigo_par.getText());
		Integer pontos = Integer.parseInt(pontos_par.getText());
		
		cfi.adicionarPontos(codigo, pontos);
		
		return element;
	}
	
	public OMElement utilizarPontos(OMElement element) {
		
		CartaoFidelidadeImpl cfi = new CartaoFidelidadeImpl();
		
		// Criar um OMElement que retorna um booleano
		Iterator<OMElement> it = element.getChildElements();
		OMElement codigo_par = it.next();
		OMElement pontos_par = it.next();
		
		Integer codigo = Integer.parseInt(codigo_par.getText());
		Integer pontos = Integer.parseInt(pontos_par.getText());
		
		Boolean retorno = cfi.utilizarPontos(codigo, pontos);
		
		OMFactory fac = OMAbstractFactory.getOMFactory();
		OMNamespace ns_ret = fac.createOMNamespace("return", "ret");
		OMElement return_element = fac.createOMElement("atributo", ns_ret);
		
		return_element.setText(retorno.toString());
		
		return return_element;
	}
	
	public OMElement removerPontosAntigos(OMElement element) {
		
		CartaoFidelidadeImpl cfi = new CartaoFidelidadeImpl();
		
		Integer codigoCliente = Integer.parseInt(element.getText());
		
		cfi.removerPontosAntigos(codigoCliente);
		
		return element;
	}
	
	public OMElement obterSomaPontos(OMElement element) {
		
		CartaoFidelidadeImpl cfi = new CartaoFidelidadeImpl();
		
		Integer codigoCliente = Integer.parseInt(element.getText());
		
		Integer retorno = cfi.obterSomaDePontos(codigoCliente);
		
		element.setText(retorno.toString());
		
		return element;
	}
}
